package 剑指Offer._2130;

import java.util.Deque;
import java.util.LinkedList;

/**
 * @author yzh
 * @version 1.0
 * @date 2021/8/30 19:16
 * 包含 min 函数的栈
 * 算法：栈
 * 如果当前最小的元素被出栈了，那么下一个最小的元素是多少
 * 两个栈，一个栈放最小元素
 * 如果当前元素比最小栈中的元素还小，就将这个元素放入最小栈中
 */
public class _30 {

    class MinStack {
        Deque<Integer> min, stack;

        /** initialize your data structure here. */
        public MinStack() {
            min = new LinkedList<>();
            stack = new LinkedList<>();
        }

        public void push(int x) {
            if (min.isEmpty() || x <= min.peek()) min.push(x);
            stack.push(x);
        }

        public void pop() {
            if (min.peek().equals(stack.pop())) min.pop();
        }

        public int top() {
            return stack.peek();
        }

        public int min() {
            return min.peek();
        }
    }

}
